home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * hfield.h
- *
- * This module contains all defines, typedefs, and prototypes for HFIELD.C.
- *
- * from Persistence of Vision(tm) Ray Tracer
- * Copyright 1996 Persistence of Vision Team
- *---------------------------------------------------------------------------
- * NOTICE: This source code file is provided so that users may experiment
- * with enhancements to POV-Ray and to port the software to platforms other
- * than those supported by the POV-Ray Team. There are strict rules under
- * which you are permitted to use this file. The rules are in the file
- * named POVLEGAL.DOC which should be distributed with this file. If
- * POVLEGAL.DOC is not available or for more info please contact the POV-Ray
- * Team Coordinator by leaving a message in CompuServe's Graphics Developer's
- * Forum. The latest version of POV-Ray may be found there as well.
- *
- * This program is based on the popular DKB raytracer version 2.12.
- * DKBTrace was originally written by David K. Buck.
- * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
- *
- *****************************************************************************/
-
- #ifndef HFIELD_H
- #define HFIELD_H
-
- #include "bbox.h"
- #include "boxes.h"
-
-
-
- /*****************************************************************************
- * Global preprocessor defines
- ******************************************************************************/
-
- #define HFIELD_OBJECT (BASIC_OBJECT+WATER_LEVEL_OK_OBJECT+SMOOTH_OK_OBJECT+HIERARCHY_OK_OBJECT)
-
- #define HF_CACHE_SIZE 16
-
- /* Generate additional height field statistics. */
-
- #define HFIELD_EXTRA_STATS 1
-
-
- /*****************************************************************************
- * Global typedefs
- ******************************************************************************/
-
- typedef struct HField_Struct HFIELD;
- typedef struct HField_Data_Struct HFIELD_DATA;
- typedef struct HField_Block_Struct HFIELD_BLOCK;
- typedef struct HField_Normal_Struct HFIELD_NORMAL;
- typedef short HF_Normals[3];
- typedef unsigned short HF_VAL;
-
- struct HField_Normal_Struct
- {
- DBL fx, fz;
- VECTOR normal;
- };
-
- struct HField_Block_Struct
- {
- int xmin, xmax;
- int zmin, zmax;
- DBL ymin, ymax;
- };
-
- struct HField_Data_Struct
- {
- int References;
- int cache_pos;
- int Normals_Height; /* Needed for Destructor */
- int max_x, max_z;
- HF_VAL min_y, max_y;
- int block_max_x, block_max_z;
- int block_width_x, block_width_z;
- HF_VAL **Map;
- HF_Normals **Normals;
- HFIELD_NORMAL Normal_Cache[HF_CACHE_SIZE];
- HFIELD_BLOCK **Block;
- };
-
- struct HField_Struct
- {
- OBJECT_FIELDS
- TRANSFORM *Trans;
- BOX *bounding_box;
- HFIELD_DATA *Data;
- };
-
-
-
- /*****************************************************************************
- * Global variables
- ******************************************************************************/
-
- extern METHODS HField_Methods;
-
-
- /*****************************************************************************
- * Global functions
- ******************************************************************************/
-
- HFIELD *Create_HField PARAMS((void));
- void Compute_HField_BBox PARAMS((HFIELD *HField));
- void Compute_HField PARAMS((HFIELD *H_Field, IMAGE *Image));
-
-
-
- #endif
-